package com.gongJiao.controller;


import com.gongJiao.Vo.PageCondition;
import com.gongJiao.Vo.PageResult;
import com.gongJiao.Vo.SiteXlVo;
import com.gongJiao.common.Result;
import com.gongJiao.entity.Site;
import com.gongJiao.service.RouteService;
import com.gongJiao.service.SiteService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 * @author ${author}
 * @since 2021-12-25
 */
@Controller
@RequestMapping("/site")
public class SiteController {
    @Autowired
    SiteService siteService;
    @Autowired
    RouteService routeService;

    /**
     * 获取所以站点信息
     * @return
     */
    @GetMapping("getSiteList")
    @ResponseBody
    public Result getSiteList(HttpSession session){
        List<Site> siteList=siteService.getSiteList();
        session.setAttribute("siteList",siteList);
        return Result.success("成功",siteList);
    }

    /**
     * 多选下拉框获取所以站点信息
     * @return
     */
    @GetMapping("getSiteListAdd")
    @ResponseBody
    public Result getSiteListAdd(HttpSession session){
        List<SiteXlVo> siteLists=siteService.getSiteListAdd();
        session.setAttribute("siteList",siteLists);
        return Result.success("成功",siteLists);
    }

    /**
     * 后台分页查询站点信息列表
     * @return
     */
    @GetMapping("getSitePageList")
    @ResponseBody
    public PageResult<Site> getVehiclePageList(PageCondition pageCondition){
        PageResult<Site> pageResult=new PageResult<Site>();
        //根据名字查询
        //查询所以数据
        List<Site> list=siteService.getSiteListByName(pageCondition);
        //查询总记录数
        Integer count=siteService.getCountByName(pageCondition);
        return pageResult.success(list,count);
    }
    /**
     * 判断站点名是否可用
     * @param name
     * @return
     */
    @GetMapping("/judgeAvailable")
    @ResponseBody
    public Result judgeAvailable(String name){
        if ("".equals(name)){
            return Result.fail("站点名不能为空");
        }
        Site site=siteService.getSiteByName(name);
        if (site == null) {
            return Result.success("站点名可用");
        }
        return Result.fail("站点名已存在不可用");
    }

    /**
     * 添加站点
     * @param site
     * @return
     */
    @PostMapping("addSite")
    @ResponseBody
    public Result addVehicle(Site site){
        Site siteByName = siteService.getSiteByName(site.getName());
        if (siteByName == null) {
            boolean save = siteService.save(site);
            if (save) {
                return Result.success("新增成功");
            }
            return Result.fail("新增失败");
        }else {
            return Result.fail("站点名重复");
        }
    }

    /**
     * 根据id获取站点信息
     * @param id
     * @return
     */
    @GetMapping("/getSite/{id}")
    public String getTypeById(@PathVariable Long id, Model model){
        //获取分类信息
        Site site=siteService.getSiteById(id);
        model.addAttribute("site",site);
        return "admin/siteEdit";
    }

    /**
     * 修改信息
     * @param site
     * @return
     */
    @PostMapping("updateSite")
    @ResponseBody
    public Result updateType(Site site){
        Site siteByName = siteService.getSiteByName(site.getName());
        if (siteByName == null) {
            Boolean flag=siteService.updateSite(site);
            if (flag) {
                return Result.success("站点信息修改成功！");
            }
            return Result.fail("站点信息修改失败！");
        }else {
            return Result.success("站点名称已存在，无法进行修改！");
        }
    }

    /**
     * 删除站点信息
     * @param ids
     * @return
     */
    @PostMapping("/{ids}")
    @ResponseBody
    public Result deleteTypeByIds(@PathVariable("ids") Long ids){
        //查询站点是否被使用
        String routeNames= routeService.getRoutBySiteId(ids);
        if(routeNames==null){
            siteService.deleteSiteByIds(ids);
            return Result.success("删除站点成功！");
        }else {
            return Result.fail("该站点已经被路线："+routeNames+"使用无法进行删除！");
        }
    }
}

